# -*- encoding: utf-8 -*-
# acos parser
# like http://www.vestvagoy.kommune.no/seksjoner/Innsyn
############################################################################
#    Copyright (C) 2007 by Håvard Gulldahl                                 #
#    havard@gulldahl.no                                                    #
#                                                                          #
#    This program is free software; you can redistribute it and#or modify  #
#    it under the terms of the GNU General Public License as published by  #
#    the Free Software Foundation; either version 2 of the License, or     #
#    (at your option) any later version.                                   #
#                                                                          #
#    This program is distributed in the hope that it will be useful,       #
#    but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#    GNU General Public License for more details.                          #
#                                                                          #
#    You should have received a copy of the GNU General Public License     #
#    along with this program; if not, write to the                         #
#    Free Software Foundation, Inc.,                                       #
#    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             #
############################################################################

import logging, re, urlparse
from datetime import datetime
from time import strptime
import BeautifulSoup
import jeje.parser

class parser(jeje.parser.ejeje_parser):
    def parse_enkeltjournal(self, suppe, uri):
        #jeje.parser.ejeje_parser.__init__(self, suppe, postjournal_samling)
        logging.info('starter acos-parser')
        dato = suppe.h1.string[len('Postliste den '):]
        logging.debug('fant dato %s', dato)
        journaldato = datetime(*strptime(dato, '%d.%m.%Y')[0:6])
        self.sett_info(journaldato)
        telling_regex = re.compile(r"Viser dokument (\d+) til (\d+) av totalt (\d+)")
        startrad = stopprad = 0
        totalrad = 100
        neste_side_uri = ''
        while stopprad < totalrad:
            logging.debug('finner postjournaltabell i suppa')#, poster %i til %i', startrad, stopprad)
            try:
                _tittelposter = suppe.find('table', 'inner-max-width').findAll('tr')
            except AttributeError:
                # empty -- no posts
                return []
            #print _tittelposter, '='*10, _tittelposter[1].td.string
            telling = re.match(telling_regex, _tittelposter[1].td.string)
            logging.debug('fant tellingen: %s', telling.groups())
            startrad, stopprad, totalrad = [ int(j) for j in telling.groups() ]
            for lenke in _tittelposter[2].findAll('a'):
                if lenke.string == u'neste':
                    if neste_side_uri == lenke['href']: # infinite loop
                        logging.error('bryter uendelig lukke')
                        break
                    neste_side_uri = lenke['href']
            logging.debug('fant %d titler, poster %s til %s', len(_tittelposter), startrad, stopprad)
            for i, tp in enumerate(_tittelposter[3:]):
                #<th class="header-cell"><a title="Innkomande(I) eller utgåande(U) dokument.">I/U</a></th>,
                #<th class="header-cell"><span title="Avsendar eller mottakar. Dersom det er fleire, kan du sjå alle om du klikker på detalj-lenkja.">Frå/Til</span></th>,
                #<th class="header-cell">Tittel på dokumentet</a></th>,
                #<th class="header-cell">Vis detaljer</th>,
                #<th class="header-cell">Last ned</th>

                _retning, _adressat, _tittel, _detaljer, _uri = [b for b in tp.findAll('td')]

                logging.debug('arbeider med post #%d: %s', i+1, unicode(_tittel.string))

                post = self.legg_til_post()
                post.sett_tittel(unicode(_tittel.string))
                post.sett_arkivdato(journaldato)
                post.sett_adressat(unicode(_adressat.string))
                post.sett_retning(unicode(_retning.string))
                #post.sett_dokumentdato = datetime(*strptime(_dokumentdato.span.next, '%d.%m.%Y')[0:6])
                #post.sett_lovreferanse = unicode(_grad.span.next)
                try:
                    post.sett_dok_uri(self.absoluttifiser(_uri.a['href'], uri))
                except TypeError:
                    # no uri set
                    pass
                dokdetaljer, sakdetaljer = _detaljer.findAll('a')
                ### TODO: Det er mye mer informasjon her!!!
                post.sett_arkivsaksnr(self.parse_url_query(sakdetaljer['href'])['arkivsakid'])
                post.sett_refnr(self.parse_url_query(dokdetaljer['href'])['journalpostid'])
                post.kontroller_felter()

                #post.sett_offentlig(-1 != tp.a.find('/k2000/k2post.sett_nsf/viewAttachmentsMail'))
                ##logging.debug('arkivsaksnr: %s, refnr: %s', _arkivsaksnr, _refnr)
                #person = post.sett_saksbehandler(str(_saksbehandler[0].string))
                #person.sett_uri(_saksbehandler[0]['href'])

                #self.sylt_ned(post)

            # hent neste suppe
            protocol, server_url, path = urlparse.urlparse(self.enkeltjournal.uri)[:3]
            logging.info('henter neste suppe: %s', neste_side_uri)
            suppe = self.suppeslurper('%s://%s%s' % (protocol, server_url, neste_side_uri))
        return self.journalposter
